import { get, post, put } from '@/utils/request'
import { LoginData, LoginResult, UserInfo, ApiResponse, CaptchaResponse } from '@/types/auth'

/**
 * 认证相关服务类
 * 统一管理所有认证相关的API请求
 */
class AuthService {
  /**
   * 用户登录
   * @param data 登录数据
   * @returns Promise<ApiResponse<LoginResult>> 登录结果
   */
  async login(data: LoginData): Promise<ApiResponse<LoginResult>> {
    return await post('/auth/login', data)
  }

  /**
   * 用户登出
   * @returns Promise<ApiResponse> 登出结果
   */
  async logout(): Promise<ApiResponse> {
    return await post('/auth/logout')
  }

  /**
   * 获取用户信息
   * @returns Promise<ApiResponse<UserInfo>> 用户信息
   */
  async getUserInfo(): Promise<ApiResponse<UserInfo>> {
    return await get('/auth/userinfo')
  }

  /**
   * 刷新令牌
   * @param refreshToken 刷新令牌
   * @returns Promise<ApiResponse<LoginResult>> 新的令牌信息
   */
  async refreshToken(refreshToken: string): Promise<ApiResponse<LoginResult>> {
    return await post('/auth/refresh', { refreshToken })
  }

  /**
   * 修改密码
   * @param data 密码修改数据
   * @returns Promise<ApiResponse> 修改结果
   */
  async changePassword(data: { oldPassword: string; newPassword: string }): Promise<ApiResponse> {
    return await post('/auth/change-password', data)
  }

  /**
   * 获取验证码
   * @returns Promise<ApiResponse<CaptchaResponse>> 验证码数据
   */
  async getCaptcha(): Promise<ApiResponse<CaptchaResponse>> {
    return await get('/captcha')
  }

  /**
   * 重置密码
   * @param data 重置密码数据
   * @returns Promise<ApiResponse> 重置结果
   */
  async resetPassword(data: { email: string; code: string; newPassword: string }): Promise<ApiResponse> {
    return await post('/auth/reset-password', data)
  }

  /**
   * 发送重置密码邮件
   * @param email 邮箱地址
   * @returns Promise<ApiResponse> 发送结果
   */
  async sendResetEmail(email: string): Promise<ApiResponse> {
    return await post('/auth/send-reset-email', { email })
  }

  /**
   * 验证令牌有效性
   * @param token 要验证的令牌
   * @returns Promise<ApiResponse> 验证结果
   */
  async validateToken(token: string): Promise<ApiResponse> {
    return await post('/auth/validate-token', { token })
  }

  /**
   * 更新用户信息
   * @param data 用户信息数据
   * @returns Promise<ApiResponse<UserInfo>> 更新后的用户信息
   */
  async updateProfile(data: Partial<UserInfo>): Promise<ApiResponse<UserInfo>> {
    return await put('/auth/profile', data)
  }
}

export default new AuthService()